"use strict";

Object.defineProperty(exports, "__esModule", {
	value: true
});
exports.encrypt = encrypt;
exports.isDecryptPassed = isDecryptPassed;
/**
 * 简单的加密最后会给参数添加一个生成的checkcode属性
 * checkcode和时间戳有关，所以加密端和解密端必须时间一致
 * @param {*} jsonObj json参数
 * @param {*} salt 加盐
 */
function encrypt(jsonObj, salt) {
	var str = JSON.stringify(jsonObj);
	str = str.replace(/[\s]/g, "").replaceAll('\\n', "").replaceAll('\\t', "").replaceAll('\\r', "") + salt;
	var code = 0;
	for (var index = 0; index < str.length; index++) {
		var element = str[index];
		code += element.charCodeAt() * Math.pow(index, 2);
	}
	jsonObj.checkcode = code + new Date().getTime();
}

/**
 * 判断数据是否验证通过,数据被加密后小于等于有效时间;
 * 注意这里会改变原对象的checkcode
 * @param {*} jsonObj 需要校验的对象
 * @param {*} salt 加盐
 * @param {*} expire 数据被加密后的有效时间
 * @returns 
 */
function isDecryptPassed(jsonObj, salt) {
	var expire = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 20000;

	var temp = JSON.parse(JSON.stringify(jsonObj));
	delete temp.checkcode;
	encrypt(temp, salt);
	return jsonObj.checkcode <= temp.checkcode && temp.checkcode - jsonObj.checkcode <= expire;
}

exports.default = {
	encrypt: encrypt,
	isDecryptPassed: isDecryptPassed
};